package exercises.leetcode;

import java.util.HashMap;
import java.util.HashSet;

/**
 * <a href="https://leetcode-cn.com/problems/word-pattern/">
 * 290. 单词规律</a>
 *
 * <p><span color="#87CEEB">描述:</span>
 * 给定一种规律 pattern 和一个字符串 str ，判断 str 是否遵循相同的规律。
 * <p>
 * 这里的 遵循 指完全匹配，例如， pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
 *
 * @author or2
 * @date 2021年10月31日 时间: 8:45
 */
public class No290 {
    public boolean wordPattern(String pattern, String s) {
        String[] words = s.split("\\s");
        var map = new HashMap<Character, String>();
        var set = new HashSet<String>();
        char[] charArray = pattern.toCharArray();
        if (charArray.length!=s.length()) return false;
        for (int i = 0, charArrayLength = charArray.length; i < charArrayLength; i++) {
            char c = charArray[i];
            if (map.containsKey(c)) {
                if (!map.get(c).equals(words[i])) return false;
            } else {
                if (set.contains(words[i])) return false;
                map.put(c, words[i]);
                set.add(words[i]);
            }
        }

        return true;
    }
}
